class <%= controller_class_name %>Controller < ApplicationController
  # OAUTH STUFF

  # TODO:
  # before_filter :require_login, :only => [:create]
  
  # Step #1
  # Once end user indicates he wish to use this site to access his resources
  # on OAuth provider site, we connect to OAuth provider site to obtain a request
  # token pair.
  # Then, we redirect end user to the OAuth provider site to get him to give
  # his explicit permission
  #
  def create
    @<%= singular_name %> = <%= class_name %>.new
    
    # 
    # TODO: 1. End user should've logged in before he is allowed to reach here
    #       2. Associate @<%= singular_name %> with the logged in user
    # e.g.    
    # @<%= singular_name %>.oauth_user = User.find(session[:user_id])
    # 

    @<%= singular_name %>.callback_url = callback_<%= singular_name %>_url("oauth")
    result = @<%= singular_name %>.oauth_request_token
    @<%= singular_name %>.save! # save token
    if @<%= singular_name %>.oauth_token
      redirect_to @<%= singular_name %>.oauth_authorization_redirection_url
    else
      flash[:notice] = "Unable to retrieve request token"
      render :partial => 'debug', :object => (result && result["response"])
    end
  end
  
  # Step #2
  # End user will return here when he has told OAuth provider to authorize us. 
  # We'll connect to OAuth provider site directly, to exchange our request token
  # for access token. Access token can be used subsequently for API calls to 
  # the OAuth provider site on behalf of this end user
  # 
  def callback
    @<%= singular_name %> = <%= class_name %>.find_by_oauth_token(params[:token] || params[:oauth_token])
    @<%= singular_name %>.callback_url = callback_<%= singular_name %>_url("oauth")
    if @<%= singular_name %> && (result = @<%= singular_name %>.oauth_request_access) && @<%= singular_name %>.save! && @<%= singular_name %>.oauth_token
      flash[:notice] = "Successful"
      return redirect_to <%= singular_name %>_url(@<%= singular_name %>)
    else
      flash[:notice] = "Fail"
    end
    render :partial => 'debug', :object => (result && result["response"])
  end







  # CRUD STUFF

  # GET /<%= table_name %>
  # GET /<%= table_name %>.xml
  def index
    @<%= table_name %> = <%= class_name %>.find(:all)

    respond_to do |format|
      format.html # index.rhtml
      format.xml  { render :xml => @<%= table_name %>.to_xml }
    end
  end

  # GET /<%= table_name %>/1
  # GET /<%= table_name %>/1.xml
  def show
    @<%= file_name %> = <%= class_name %>.find(params[:id])

    respond_to do |format|
      format.html # show.rhtml
      format.xml  { render :xml => @<%= file_name %>.to_xml }
    end
  end

  # GET /<%= table_name %>/new
  def new
    @<%= file_name %> = <%= class_name %>.new
  end

  # GET /<%= table_name %>/1;edit
  def edit
    @<%= file_name %> = <%= class_name %>.find(params[:id])
  end

  # POST /<%= table_name %>
  # POST /<%= table_name %>.xml
  def o_create
    @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])

    respond_to do |format|
      if @<%= file_name %>.save
        flash[:notice] = '<%= class_name %> was successfully created.'
        format.html { redirect_to <%= file_name %>_url(@<%= file_name %>) }
        format.xml  { head :created, :location => <%= file_name %>_url(@<%= file_name %>) }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @<%= file_name %>.errors.to_xml }
      end
    end
  end

  # PUT /<%= table_name %>/1
  # PUT /<%= table_name %>/1.xml
  def update
    @<%= file_name %> = <%= class_name %>.find(params[:id])

    respond_to do |format|
      if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
        flash[:notice] = '<%= class_name %> was successfully updated.'
        format.html { redirect_to <%= file_name %>_url(@<%= file_name %>) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @<%= file_name %>.errors.to_xml }
      end
    end
  end

  # DELETE /<%= table_name %>/1
  # DELETE /<%= table_name %>/1.xml
  def destroy
    @<%= file_name %> = <%= class_name %>.find(params[:id])
    @<%= file_name %>.destroy

    respond_to do |format|
      format.html { redirect_to <%= table_name %>_url }
      format.xml  { head :ok }
    end
  end
end
